先來介紹一下Kafka的基本架構吧 (以下圖片都取自Kafka documentation)。
基本上Kafka是一個broker的角色,仲介producer與consumer。Kafka一般是由多個節點所構成的cluster。
Kafka有自己的producer API和consumer API,produce/consumer client 必須要使用或依照API spec自行實作存取的方式。
一組資料流稱為一個Topic,為避免一個Topic的資料量過大,所以一個Topic可以分成好幾個Partition,每個Partition會在不同的節點上(如果可以的話)。
Producer必須要自己決定要將資料送到哪個partition,在producer API裡有一個參數可以讓使用者指定partition key,然後producer API用hash方式決定partition。
Kafka可以彈性的支援point-to-point和pub/sub兩種Queue mode。主要是透過一個Consumer Group的抽象,每個Consumer Group當做是一個虛擬consumer,但可以由多個實體的consumer組成。一組Point-to-point就是將所有consumer都劃成同一個Consumer Group;而Pub/Sub是將不同Pub的Sub分成不同的Consumer Group
一個重點是,每一個Consumer只會同時bind一個partition,也就是說,一個Consumer只會找一個partition來拉資料。
這帶來一些很重要的暗示,也是Kafka的限制所在,這些限制就下次再講吧。